﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using ToDoApp.Data;
using ToDoApp.DataModels;
using ToDoApp.Web.IDataAdapters.Interfaces;


namespace ToDoApp.Web.IDataAdapters.Adapters
{
    public class ToDoAdapter : IToDoAdapter
    {
        public List<DataModels.ToDo> GetAllTodos()
        {
            List<ToDo> todos;
            using (ApplicationDbContext db = new ApplicationDbContext())
            {
                todos = db.todoList.OrderBy(x => x.TimeStamp).ToList();
            }
            return todos;
        }

        public DataModels.ToDo AddTodo(DataModels.ToDo todo)
        {
            using (ApplicationDbContext db = new ApplicationDbContext())
            {
                todo = db.todoList.Add(todo);
                db.SaveChanges();
            }
            return todo;
        }

        public DataModels.ToDo GetTodo(int id)
        {
            ToDo todo;
            using (ApplicationDbContext db = new ApplicationDbContext())
            {
                todo = db.todoList.Find(id);
            }
            return todo;
        }

        public DataModels.ToDo UpdateTodo(DataModels.ToDo todo)
        {
            using (ApplicationDbContext db = new ApplicationDbContext())
            {
                ToDo oldTodo = db.todoList.Find(todo.Id);
                oldTodo.Task = todo.Task;
                oldTodo.IsFinished = todo.IsFinished;
                db.SaveChanges();
            }
            return todo;
        }

        public DataModels.ToDo MarkFinished(int id)
        {
            ToDo todo;
            using (ApplicationDbContext db = new ApplicationDbContext())
            {
                todo = db.todoList.Find(id);
                todo.IsFinished = !todo.IsFinished;
                db.SaveChanges();
            }
            return todo;
        }

        public void DeleteTodo(int id)
        {
            using (ApplicationDbContext db = new ApplicationDbContext())
            {
                ToDo todo = db.todoList.Find(id);
                db.todoList.Remove(todo);
                db.SaveChanges();
            }
        }
    }
}